package cn.ljh.mybatisplus.config;

import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
//import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * @author JH  2024-06
 */
@Slf4j
@MapperScan("cn.ljh.mybatisplus.mapper") //扫描功能放在这个配置类即可，不用放在启动类
@EnableTransactionManagement //开启自动管理事务的注解，默认也是开启的
@Configuration //配置类
public class MyBatisPlusConfig {

    //注册乐观锁插件---可去官方文档获取代码
    //这是一个拦截器，在执行所有操作的时候会进行拦截，然后进行自动化的处理
//    @Bean
//    public MybatisPlusInterceptor mybatisPlusInterceptor() {
//        log.info("使用到 MyBatis-Plus 乐观锁插件------------------------------------------------------");
//        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
//        return interceptor;
//    }

    /**
     * 简化下乐观锁插件代码
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        log.info("使用到 MyBatis-Plus 乐观锁插件------------------------------------------------------");
        return new OptimisticLockerInterceptor();
    }


//    /**
//     * 添加分页插件
//     */
//    @Bean
//    public MybatisPlusInterceptor myPage() {
//        log.info("使用到 MyBatis-Plus 分页插件------------------------------------------------------");
//        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加
//        // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
//        return interceptor;
//    }

    /**
     * 简化分页插件代码
     */
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }


    /**
     * 添加 SQL 执行的性能分析插件
     */
//    @Bean
//    @Profile({"dev","test"}) //设置当前项目的开发环境为 dev 或者 test 时，开启这个插件
//    public PerformanceInterceptor performanceInterceptor(){
//        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
//        // 1 ms 毫秒，设置sql执行的最大时间，如果sql执行的时间超过1毫秒，则不执行。
//        performanceInterceptor.setMaxTime(1);
//        //设置开启 sql 语句格式化
//        performanceInterceptor.setFormat(true);
//        return performanceInterceptor;
//    }


}

















